"""
name: 教学案例3 自定义信号及使用 实例
version: 1.0
"""
from PyQt5.QtCore import pyqtSignal, QObject


# 自定义信号示例
class MyRange(QObject):
    # 发生错误时，发送的信号
    err = pyqtSignal()
    # 设置区间成功时，发送的信号
    range_changed = pyqtSignal(int, int, name='rangeChanged')

    __start = 0
    __end = 0

    def set_range(self, start, end):
        """
        设置区间范围，若不满足区间条件，则发送错误信号；
        若满足，则发送设置结果
        """
        if end < start:
            self.err.emit()
        else:
            self.__start = start
            self.__end = end
            self.range_changed.emit(self.__start, self.__end)


# 槽函数示例
def errmsg():
    print('区间的起点不能大于终点！')


class Foo:
    @classmethod
    def range_err(cls):
        print('区间设置不符合规范！')

    def range_changed(self, start, end):
        print('range changed: [', start, end, ']')


# 信号与槽函数连接和使用示例
if __name__ == "__main__":
    # 创建MyRange对象
    myrange = MyRange()
    # 将MyRange的err信号连接到errmsg函数
    myrange.err.connect(errmsg)
    # 将MyRange的err信号连接到Foo的静态方法range_err
    myrange.err.connect(Foo.range_err)
    fmsg = Foo()
    # 将MyRange的range_changed信号连接到Foo对象的方法range_changed
    myrange.range_changed.connect(fmsg.range_changed)
    # myrange.rangeChanged.connect(fmsg.range_changed)

    
    myrange.set_range(1, 3)
    myrange.set_range(1, 0)
    